Video coding standards, such as MPEG (Motion Picture Expert Group), including its variants MPEG-2 and MPEG-4, have been developed to facilitate the storage and the transmission of digital video data in compressed form. Demand for higher video quality will likely increase the amount of video data collected that ultimately needs to be stored and/or transmitted across a plethora of transmission channels, such as computer networks, satellite links, terrestrial wireless data links, television cable, and telephony lines (including DSL (digital subscriber line)). Thus, there is a demand for video data compression having a high compression rate with minimal data loss.
One such technique for video data compression is known as motion estimation. According to this technique, temporal redundancies in video data between neighboring video frames or fields are identified so that an encoder only needs to pass a motion vector to a decoder, instead of retransmitting redundant data. For example, a video camera may record a car moving relative to a stop sign as the video camera itself pans. Thus, not only is the car moving relative to the stop sign from one frame to the next, but the stop sign is also moving as a result of the panning. Motion estimation attempts to identify temporally redundant data by searching for a portion of the car or stop sign in another video frame (e.g., a previous video frame that may have already been sent to the decoder). The group of pixels being searched for (e.g., the portion of the car or stop sign in the frame currently being encoded) is known as a macroblock. The group of pixels being searched (e.g., a region of the previous video frame) is known as a search window. If the macroblock matches a group of pixels in the search window, a motion vector representing the direction and amount of motion from frame to frame is generated. For example, the motion vector may indicate that a portion of the stop sign moved up and to the left by a certain distance. By transmitting the motion vector instead of the group of pixels that resembled the macroblock, less storage space and bandwidth are needed. However, searching for the temporally redundant data is computationally intensive, especially if the video data has a high definition resolution.
Field-programmable object arrays (FPOAs) have been developed to fill a gap between field-programmable gate arrays (FPGAs) and application-specific integrated circuits (ASICs). A typical FPOA comprises a number of programmable objects along with a programmable high-speed interconnection network. The objects in an FPOA, as compared to the relatively simple gates of an FPGA, can be more complex (sometimes considerably more complex), while the number of objects in a typical FPOA is usually less (sometimes much less) than the number of gates in an FPGA. Examples of object types include arithmetic logic units (ALUs), multiply/accumulate units (MACs), and memory banks such as register files (RFs). An FPOA's objects, which are typically designed in advance to have timing closure at high clock speeds, can be combined in intuitive ways to provide powerful processing capability, which is especially well suited to meet the performance and flexibility requirements of video data compression. However, video data compression techniques may still be costly to implement and have less than ideal operating performance even when implemented using the powerful processing capability of FPOAs.